package com.weareint.examples.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.weareint.examples.entity.Product;
import com.weareint.examples.dto.ProductDTO;
import com.weareint.common.dto.QueryByIdDto;
import com.weareint.common.dto.QueryByPropsWithOprDto;
import com.weareint.common.dto.UpdateByPropsWithOprDto;
import com.weareint.common.service.IBasicService;

import java.io.Serializable;
import java.util.Map;

/**
 *
 *
 * <pre>
 *     产品
 * </pre>
 *
 * @author Auto Generator
 * @date 2021-07-16
 */
public interface IProductService extends IBasicService<Product, ProductDTO> {

    /**
     *
     *
     * <pre>
     *     查ID查询对象
     * </pre>
     *
     * @param id ID
     * @param throwExceptionWhenNotFound true，未查询到时抛出异常；false，未查询到时返回null
     * @return {@link Product}
     */
    Product getById(Serializable id, boolean throwExceptionWhenNotFound);

    /**
     *
     *
     * <pre>
     *      按ID查询指定的字段
     * </pre>
     *
     * @param queryByIdDTO {@link QueryByIdDto}
     * @return map
     */
     Map<String, Object> findPropsById(QueryByIdDto queryByIdDTO);

    /**
     *
     *
     * <pre>
     *     分页查询 {@link Product}，并指定要查询的相关字段
     * </pre>
     *
     * @param queryByPropsWithOprDto {@link QueryByPropsWithOprDto}
     * @return page of map
     */
    Page<Map<String, Object>> findPropsByPage(QueryByPropsWithOprDto queryByPropsWithOprDto);

    /**
     *
     *
     * <pre>
     *     按设置的条件更新数据
     * </pre>
     *
     * @param updateByPropsWithOprDto {@link UpdateByPropsWithOprDto}
     */
    void update(UpdateByPropsWithOprDto updateByPropsWithOprDto);
}
